package com.cysoft.third.echarts.component.visualMap.continuous;

/**
 * @author 玖零
 * @version v0.0.1
 * @project cysoft-third-echarts
 * @package com.cysoft.third.echarts.component.visualMap.continuous
 * @date 2025/3/13 00:58
 * @desc 连续型视觉映射组件配置，用于在 ECharts 中实现连续数据到视觉元素的映射。
 */
public class VisualMapContinuous {

    /**
     * 组件类型，固定为连续型
     */
    private String type = "continuous";
    /**
     * 组件 ID。默认不指定，指定则可用于在 option 或者 API 中引用组件。
     */
    private String id;
    /**
     * 指定 visualMapContinuous 组件的允许的最小值。必须由用户指定，与 max 共同形成视觉映射的定义域。
     */
    private Integer min;
    /**
     * 指定 visualMapContinuous 组件的允许的最大值。必须由用户指定，与 min 共同形成视觉映射的定义域。
     */
    private Integer max;
    /**
     * 指定手柄对应数值的位置，应在 min 和 max 范围内。若不设置或设置为 null，则默认为 [min, max]，
     * 且会随 min 和 max 的改变而自动更新；若设置了具体值，则不会随 min 和 max 的改变而改变，
     * 除非将其重新设置为 null。
     */
    private Object[] range;
    /**
     * 是否显示拖拽用的手柄，手柄可用于拖拽调整选中范围。
     * 注：为兼容 ECharts2，当 visualMap.type 未指定时，假如设置了 'calculable'，则 type 自动被设置为 'continuous'，
     * 无视 visualMap-piecewise.splitNumber 等设置。所以，建议使用者明确指定 visualMap.type。
     */
    private Boolean calculable;
    /**
     * 拖拽时，是否实时更新。若为 true，则在拖拽手柄过程中实时更新图表视图；若为 false，则在拖拽结束时更新视图。
     */
    private Boolean realtime = true;
    /**
     * 是否反转 visualMap 组件。为 false 时，数据大小的位置规则和直角坐标系相同；为 true 时则相反。
     */
    private Boolean inverse;
    /**
     * 数据展示的小数精度，默认为 0，即无小数点。
     */
    private Integer precision = 0;
    /**
     * 图形的宽度，即长条的宽度。
     */
    private Integer itemWidth = 20;
    /**
     * 图形的高度，即长条的高度。
     */
    private Integer itemHeight = 140;
    /**
     * 指定组件中手柄和文字的摆放位置，可选值为 'auto'（自动决定）、'left'（手柄和 label 在右，orient 为 horizontal 时有效）、
     * 'right'（手柄和 label 在左，orient 为 horizontal 时有效）、'top'（手柄和 label 在下，orient 为 vertical 时有效）、
     * 'bottom'（手柄和 label 在上，orient 为 vertical 时有效）。
     */
    private String align = "auto";
    /**
     * 两端的文本，如 ['High', 'Low']。其顺序受 inverse 属性影响。
     */
    private String[] text;
    /**
     * 两端文字主体之间的距离，单位为 px。
     */
    private Integer textGap = 10;
    /**
     * 是否显示 visualMap-continuous 组件。若设置为 false，虽不显示但数据映射功能仍存在。
     */
    private Boolean show = true;
    /**
     * 指定用数据的哪个维度映射到视觉元素上。数据即 series.data，可将其理解为二维数组，每个列是一个维度。
     * 默认取 data 中最后一个维度。
     */
    private Integer dimension;
    /**
     * 指定取哪个系列的数据，即哪个系列的 series.data。默认取所有系列。
     */
    private Integer[] seriesIndex;
    /**
     * 打开 hoverLink 功能时，鼠标悬浮到 visualMap 组件上时，鼠标位置对应的数值在图表中对应的图形元素会高亮；
     * 反之，鼠标悬浮到图表中的图形元素上时，在 visualMap 组件的相应位置会有三角提示其所对应的数值。
     */
    private Boolean hoverLink = true;
    /**
     * 定义在选中范围中的视觉元素，可同时定义目标系列和 visualMap-continuous 本身的视觉样式。
     */
    private VisualMapRange inRange;
    /**
     * 定义在选中范围外的视觉元素，配置参考 inRange。
     */
    private VisualMapRange outOfRange;
    /**
     * visualMap 组件中，控制器的 inRange 和 outOfRange 设置。若有此设置，则采用该设置；若无，则使用外层的 inRange 和 outOfRange 设置。
     */
    private VisualMapController controller;
    /**
     * 所有图形的 zlevel 值。zlevel 用于 Canvas 分层，不同 zlevel 值的图形会放置在不同的 Canvas 中，
     * zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。
     */
    private Integer zlevel;
    /**
     * 组件的所有图形的 z 值。控制图形的前后顺序，z 值小的图形会被 z 值大的图形覆盖。
     * z 相比 zlevel 优先级更低，而且不会创建新的 Canvas。
     */
    private Integer z = 4;
    /**
     * visualMap 组件离容器左侧的距离。值可以是具体像素值（如 20）、相对于容器高宽的百分比（如 '20%'），
     * 也可以是 'left', 'center', 'right'。如果为 'left', 'center', 'right'，组件会根据相应的位置自动对齐。
     */
    private Object left;
    /**
     * visualMap 组件离容器上侧的距离。值可以是具体像素值（如 20）、相对于容器高宽的百分比（如 '20%'），
     * 也可以是 'top', 'middle', 'bottom'。如果为 'top', 'middle', 'bottom'，组件会根据相应的位置自动对齐。
     */
    private Object top = "auto";
    /**
     * visualMap 组件离容器右侧的距离。值可以是具体像素值（如 20）、相对于容器高宽的百分比（如 '20%'）。
     */
    private Object right = "auto";
    /**
     * visualMap 组件离容器下侧的距离。值可以是具体像素值（如 20）、相对于容器高宽的百分比（如 '20%'）。
     */
    private Object bottom;
    /**
     * 如何放置 visualMap 组件，水平（'horizontal'）或者竖直（'vertical'）。
     */
    private String orient = "vertical";
    /**
     * visualMap-continuous 内边距，单位 px，默认各方向内边距为 5，接受数组分别设定上右下左边距。
     * 例如：[5] 表示各方向内边距为 5；[5, 10] 表示上下内边距为 5，左右内边距为 10；[5, 10, 5, 10] 表示上右下左内边距分别为 5, 10, 5, 10。
     */
    private Object padding = 5;
    /**
     * 背景色。
     */
    private String backgroundColor = "rgba(0,0,0,0)";
    /**
     * 边框颜色。
     */
    private String borderColor = "#ccc";
    /**
     * 边框线宽，单位 px。
     */
    private Integer borderWidth;
    /**
     * 这个配置项是为了兼容 ECharts2 而存在，ECharts3 中已不推荐使用。其功能已移到 inRange 和 outOfRange 中。
     * 需注意，color 属性中的顺序是由数值大到小，而 inRange 或 outOfRange 中 color 的顺序总是由数值小到大。
     */
    private String[] color = {"#bf444c", "#d88273", "#f6efa6"};
    /**
     * visualMap 文字的样式配置。
     */
    private VisualMapTextStyle textStyle;
    /**
     * 标签的格式化工具。如果为 string，表示模板，例如：aaaa{value}，其中 {value} 是当前的范围边界值；
     * 如果为 Function，表示回调函数，用于自定义范围标签显示内容。
     */
    private Object formatter;
    /**
     * 两端手柄的形状。默认为特定的矢量路径，也可以通过 'image://url' 设置为图片（URL 为图片的链接或 dataURI），
     * 还可以通过 'path://' 将图标设置为任意的矢量路径。
     */
    private String handleIcon = "M-11.39,9.77h0a3.5,3.5,0,0,1-3.5,3.5h-22a3.5,3.5,0,0,1-3.5-3.5h0a3.5,3.5,0,0,1,3.5-3.5h22A3.5,3.5,0,0,1-11.39,9.77Z";
    /**
     * 手柄的大小。可以是相对于组件尺寸的百分比大小。
     */
    private Object handleSize = "120%";
    /**
     * 手柄的样式配置。
     */
    private VisualMapHandleStyle handleStyle;
    /**
     * 指示器的形状，默认为圆形。指示器在鼠标移到组件上，或者在移到系列图形上联动高亮的时候出现。
     */
    private String indicatorIcon = "circle";
    /**
     * 指示器的大小。可以是相对于组件尺寸的百分比大小。
     */
    private Object indicatorSize = "50%";
    /**
     * 指示器样式配置。
     */
    private VisualMapIndicatorStyle indicatorStyle;
}
